//营救
#include <iostream>
#include <queue>
using namespace std;
const int MAXN=1000;
char mat[MAXN+1][MAXN+1];
int n;
struct Cell{
    int x,y;
    int dep;
};
queue<Cell> qu;
bool visited[MAXN+1][MAXN+1];
int dir_offset[4][2]={
    {-1,0},{1,0},{0,-1},{0,1}
};

void search(int x1,int y1,int x2,int y2){
    Cell start={x1,y1,0};
    qu.push(start);
    visited[x1][y1]=true;
    while(!qu.empty()){
        Cell cur=qu.front();
        qu.pop();
        if (cur.x==x2&&cur.y==y2){
            cout<<cur.dep;
            return;
        }else {
            for(int d=0;d<4;d++){
                int newx=cur.x+dir_offset[d][0];
                int newy=cur.y+dir_offset[d][1];
                if (newx<1||newx>n||newx<1||newy>n) continue;
                if (!visited[newx][newy]&&mat[newx][newy]=='0'){
                    Cell next={newx,newy,cur.dep+1};
                    qu.push(next);
                    visited[newx][newy]=true;
                }
            }
        }
    }

}

int main(){
    cin>>n;
    for(int x=1;x<=n;x++)
        for(int y=1;y<=n;y++) cin>>mat[x][y];
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    search(x1,y1,x2,y2);
}